// ChatSessionModel.h
// Created by Limou on 24-8-13.
// 本数据类描述了一个会话模型
// 构造方法只能构造一个属性为空的模型对象
// makexxx() 携带多个参数构造一个属性非空的模型对象, 部分属性可以自动生成, 但是其他属性需要强制设置
// setxxx() 设置模型对象内部属性
// getxxx() 获取模型对象内部属性

#ifndef FRONTEND__CHATSESSIONMODEL_H
#define FRONTEND__CHATSESSIONMODEL_H

#include <QString>
#include <QIcon>
#include "../common/Common.hpp"
#include "MessageModel.hpp"

// >>> class ChatSessionModel begin: 聊天会话 >>>
namespace chat_system::model {
    class ChatSessionModel {
    private:
        QString chatSessionId_; // 会话 ID
        QString chatSessionName_ ; // 会话名称
        MessageModel chatSessionLastMessage_; // 最新消息
        QString chatSessionOppositeId_; // 对端 ID(也有可能是群聊 ID)
        QIcon chatSessionAvatarIco_; // 会话头像
        common::SessionType chatSessionType_; // 会话类型

    public:
        // 构造方法
        ChatSessionModel()
        : chatSessionId_("")
        , chatSessionName_("")
        , chatSessionLastMessage_(MessageModel())
        , chatSessionOppositeId_("")
        , chatSessionAvatarIco_(QIcon())
        , chatSessionType_(common::SessionType::NONE_CHAT_SESSION_TYPE) {}

        // 析构方法
        ~ChatSessionModel() = default;

        // 工厂方法
        ChatSessionModel makeChatSession(
            const QString& chatSessionName,
            const MessageModel& chatSessionLastMessage,
            const QString& chatSessionOppositeId,
            const QIcon& chatSessionAvatarIco,
            common::SessionType chatSessionType,
            const QString& chatSessionId = common::Tools::getInstance()->getUuid("C")
        ) {
            auto chatSessionModel = ChatSessionModel();

            chatSessionModel.setChatSessionName(chatSessionName);
            chatSessionModel.setChatSessionLastMessage(chatSessionLastMessage);
            chatSessionModel.setChatSessionOppositeId(chatSessionOppositeId);
            chatSessionModel.setChatSessionAvatarIco(chatSessionAvatarIco);
            chatSessionModel.setChatSessionId(chatSessionId);

            return chatSessionModel;
        }

        // 获取和设置
        const QString& getChatSessionId() const { return chatSessionId_; }
        void setChatSessionId(const QString& chatSessionId) { chatSessionId_ = chatSessionId; }

        const QString& getChatSessionName() const { return chatSessionName_; }
        void setChatSessionName(const QString& chatSessionName) { chatSessionName_ = chatSessionName; }

        const MessageModel& getChatSessionLastMessage() const { return chatSessionLastMessage_; }
        void setChatSessionLastMessage(const MessageModel& chatSessionLastMessage) { chatSessionLastMessage_ = chatSessionLastMessage; }

        const QString& getChatSessionOppositeId() const { return chatSessionOppositeId_; }
        void setChatSessionOppositeId(const QString& chatSessionOppositeId) { chatSessionOppositeId_ = chatSessionOppositeId; }

        const QIcon& getChatSessionAvatarIco() const { return chatSessionAvatarIco_; }
        void setChatSessionAvatarIco(const QIcon& chatSessionAvatarIco) { chatSessionAvatarIco_ = chatSessionAvatarIco; }

        const common::SessionType getChatSessionType() const { return chatSessionType_; }
        void setChatSessionType(const common::SessionType& chatSessionType) { chatSessionType_ = chatSessionType; }
    };
} // namespace chat_system::model end
// <<< class ChatSessionModel end <<<

#endif // FRONTEND__CHATSESSIONMODEL_H
